{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "We draw examples from here:\n",
        "\n",
        "- https://pythonot.github.io/auto_examples/plot_OT_1D_smooth.html\n",
        "- https://pythonot.github.io/auto_examples/plot_OT_2D_samples.html\n",
        "- https://github.com/mblondel/smooth-ot/tree/master/examples/color-transfer"
      ],
      "metadata": {
        "id": "AhpUbTVYHNUN"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "%matplotlib inline\n",
        "\n",
        "from google.colab import files\n",
        "\n",
        "!pip install -q POT\n",
        "!pip install git+https://github.com/google/jaxopt\n",
        "\n",
        "import jax.numpy as jnp\n",
        "\n",
        "import numpy as np\n",
        "import matplotlib.pylab as pl\n",
        "import ot\n",
        "import ot.plot\n",
        "from ot.datasets import make_1D_gauss as gauss\n",
        "from jaxopt import LBFGS\n",
        "import matplotlib as mpl\n",
        "# mpl.use('pdf')\n",
        "import matplotlib.pyplot as plt\n"
      ],
      "metadata": {
        "id": "mo60a4sGb0v-",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "3a0e3fdc-7b63-4922-fdcf-3237e695c4eb"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\u001b[?25l\r\u001b[K     |▌                               | 10 kB 8.9 MB/s eta 0:00:01\r\u001b[K     |█                               | 20 kB 3.9 MB/s eta 0:00:01\r\u001b[K     |█▌                              | 30 kB 5.6 MB/s eta 0:00:01\r\u001b[K     |██                              | 40 kB 5.7 MB/s eta 0:00:01\r\u001b[K     |██▌                             | 51 kB 6.4 MB/s eta 0:00:01\r\u001b[K     |███                             | 61 kB 7.4 MB/s eta 0:00:01\r\u001b[K     |███▌                            | 71 kB 7.6 MB/s eta 0:00:01\r\u001b[K     |████                            | 81 kB 8.3 MB/s eta 0:00:01\r\u001b[K     |████▍                           | 92 kB 8.9 MB/s eta 0:00:01\r\u001b[K     |█████                           | 102 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████▍                          | 112 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████                          | 122 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████▍                         | 133 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████                         | 143 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████▍                        | 153 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████▉                        | 163 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████▍                       | 174 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████▉                       | 184 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████▍                      | 194 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████▉                      | 204 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████▍                     | 215 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████▉                     | 225 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████▍                    | 235 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████▉                    | 245 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████▎                   | 256 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████▉                   | 266 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████▎                  | 276 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████▉                  | 286 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████▎                 | 296 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████▉                 | 307 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████▎                | 317 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████▊                | 327 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████▎               | 337 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████▊               | 348 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████▎              | 358 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████▊              | 368 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████▎             | 378 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████▊             | 389 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████▏            | 399 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████▊            | 409 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████▏           | 419 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████▊           | 430 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████████▏          | 440 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████████▊          | 450 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████████▏         | 460 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████████▊         | 471 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████████▏        | 481 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████████▋        | 491 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████████▏       | 501 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████████▋       | 512 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████████████▏      | 522 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████████████▋      | 532 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████████████▏     | 542 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████████████▋     | 552 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████████████     | 563 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████████████▋    | 573 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████████████    | 583 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████████████▋   | 593 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████████████████   | 604 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |█████████████████████████████▋  | 614 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████████████████  | 624 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |██████████████████████████████▌ | 634 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████████████████ | 645 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |███████████████████████████████▌| 655 kB 8.8 MB/s eta 0:00:01\r\u001b[K     |████████████████████████████████| 664 kB 8.8 MB/s \n",
            "\u001b[?25hLooking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
            "Collecting git+https://github.com/google/jaxopt\n",
            "  Cloning https://github.com/google/jaxopt to /tmp/pip-req-build-lg1zwqor\n",
            "  Running command git clone -q https://github.com/google/jaxopt /tmp/pip-req-build-lg1zwqor\n",
            "Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from jaxopt==0.5) (1.2.0)\n",
            "Requirement already satisfied: jax>=0.2.18 in /usr/local/lib/python3.7/dist-packages (from jaxopt==0.5) (0.3.17)\n",
            "Requirement already satisfied: jaxlib>=0.1.69 in /usr/local/lib/python3.7/dist-packages (from jaxopt==0.5) (0.3.15+cuda11.cudnn805)\n",
            "Requirement already satisfied: numpy>=1.18.4 in /usr/local/lib/python3.7/dist-packages (from jaxopt==0.5) (1.21.6)\n",
            "Requirement already satisfied: matplotlib>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from jaxopt==0.5) (3.2.2)\n",
            "Requirement already satisfied: scipy>=1.0.0 in /usr/local/lib/python3.7/dist-packages (from jaxopt==0.5) (1.7.3)\n",
            "Requirement already satisfied: etils[epath] in /usr/local/lib/python3.7/dist-packages (from jax>=0.2.18->jaxopt==0.5) (0.7.1)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from jax>=0.2.18->jaxopt==0.5) (4.1.1)\n",
            "Requirement already satisfied: opt-einsum in /usr/local/lib/python3.7/dist-packages (from jax>=0.2.18->jaxopt==0.5) (3.3.0)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.0.1->jaxopt==0.5) (0.11.0)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.0.1->jaxopt==0.5) (1.4.4)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.0.1->jaxopt==0.5) (2.8.2)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=2.0.1->jaxopt==0.5) (3.0.9)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib>=2.0.1->jaxopt==0.5) (1.15.0)\n",
            "Requirement already satisfied: zipp in /usr/local/lib/python3.7/dist-packages (from etils[epath]->jax>=0.2.18->jaxopt==0.5) (3.8.1)\n",
            "Requirement already satisfied: importlib_resources in /usr/local/lib/python3.7/dist-packages (from etils[epath]->jax>=0.2.18->jaxopt==0.5) (5.9.0)\n",
            "Building wheels for collected packages: jaxopt\n",
            "  Building wheel for jaxopt (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for jaxopt: filename=jaxopt-0.5-py3-none-any.whl size=129292 sha256=088904e21b28c9851fed657c0bfe4b29b559f4a48726a340d09926fdf7223ab1\n",
            "  Stored in directory: /tmp/pip-ephem-wheel-cache-x74r83sp/wheels/0c/1a/50/424ccbf29b323d1aa44474c7ccfdd30127d8d6fa97527794d7\n",
            "Successfully built jaxopt\n",
            "Installing collected packages: jaxopt\n",
            "Successfully installed jaxopt-0.5\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Plot setting"
      ],
      "metadata": {
        "id": "ae1thvfwHWBk"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "plt.rc('font', family='serif', serif='Times')\n",
        "# plt.rc('text', usetex=True)\n",
        "plt.rc('xtick', labelsize=12)\n",
        "plt.rc('ytick', labelsize=12)\n",
        "plt.rc('axes', labelsize=12)\n",
        "mpl.rcParams['pdf.fonttype'] = 42\n",
        "mpl.rcParams['ps.fonttype'] = 42\n",
        "\n",
        "\n",
        "SPINE_COLOR = 'gray'\n",
        "\n",
        "import numpy as onp\n",
        "def format_axes(ax):\n",
        "\n",
        "    for spine in ['top', 'right']:\n",
        "        ax.spines[spine].set_visible(False)\n",
        "\n",
        "    for spine in ['left', 'bottom']:\n",
        "        ax.spines[spine].set_color(SPINE_COLOR)\n",
        "        ax.spines[spine].set_linewidth(0.5)\n",
        "\n",
        "    ax.xaxis.set_ticks_position('bottom')\n",
        "    ax.yaxis.set_ticks_position('left')\n",
        "\n",
        "    for axis in [ax.xaxis, ax.yaxis]:\n",
        "        axis.set_tick_params(direction='out', color=SPINE_COLOR)\n",
        "\n",
        "    return ax\n",
        "\n",
        "\n",
        "import matplotlib\n",
        "\n",
        "def draw_blocks(ax, T):\n",
        "    # find contiguous chunks between coefficients\n",
        "    for k, attn_row in enumerate(T):\n",
        "        brk = onp.diff(attn_row)\n",
        "        brk = onp.where(brk != 0)[0]\n",
        "        brk = onp.append(0, brk + 1)\n",
        "        brk = onp.append(brk, T.shape[0])\n",
        "\n",
        "        right_border = True\n",
        "        for s, t in zip(brk[:-1], brk[1:]):\n",
        "            if attn_row[s:t].sum() == 0:\n",
        "                right_border = False\n",
        "                continue\n",
        "            lines = [(s, k), (t, k), (t, k + 1), (s, k + 1)]\n",
        "            lines = onp.array(lines, dtype=onp.float) - 0.5\n",
        "            path = matplotlib.patches.Polygon(lines, facecolor='none', linewidth=1.5,\n",
        "                                    alpha=1, joinstyle='round',\n",
        "                                    closed=not right_border,\n",
        "                                    edgecolor='#999999')\n",
        "            ax.add_patch(path)\n",
        "            right_border = True\n",
        "\n",
        "def draw_border(ax, T):\n",
        "    lines = [(0, 0), (0, T.shape[0]), (T.shape[1], T.shape[0]), (T.shape[1], 0)]\n",
        "    lines = onp.array(lines) - 0.5\n",
        "    path = matplotlib.patches.Polygon(lines, facecolor='none', linewidth=1.5,\n",
        "                                alpha=1, joinstyle='round',\n",
        "                                closed=True, edgecolor='#999999')\n",
        "    ax.add_patch(path)\n",
        "\n",
        "\n",
        "from matplotlib import gridspec\n",
        "\n",
        "def plot1D_mat(a, b, M, title=''):\n",
        "    r\"\"\" Plot matrix :math:`\\mathbf{M}`  with the source and target 1D distribution\n",
        "\n",
        "    Creates a subplot with the source distribution :math:`\\mathbf{a}` on the left and\n",
        "    target distribution :math:`\\mathbf{b}` on the top. The matrix :math:`\\mathbf{M}` is shown in between.\n",
        "\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    a : ndarray, shape (na,)\n",
        "        Source distribution\n",
        "    b : ndarray, shape (nb,)\n",
        "        Target distribution\n",
        "    M : ndarray, shape (na, nb)\n",
        "        Matrix to plot\n",
        "    \"\"\"\n",
        "    na, nb = M.shape\n",
        "\n",
        "    gs = gridspec.GridSpec(3, 3)\n",
        "\n",
        "    xa = np.arange(na)\n",
        "    xb = np.arange(nb)\n",
        "\n",
        "    ax1 = pl.subplot(gs[0, 1:])\n",
        "    pl.plot(xb, b, '#fc8d59', label='Target distribution', lw =3)\n",
        "    pl.yticks(())\n",
        "    pl.title(title)\n",
        "    pl.axis('off')\n",
        "\n",
        "    ax2 = pl.subplot(gs[1:, 0])\n",
        "    pl.plot(a, xa, '#999999', label='Source distribution', lw =3)\n",
        "    pl.gca().invert_xaxis()\n",
        "    pl.gca().invert_yaxis()\n",
        "    pl.xticks(())\n",
        "    pl.axis('off')\n",
        "\n",
        "    ax3 = pl.subplot(gs[1:, 1:], sharex=ax1, sharey=ax2)\n",
        "    ax3.imshow(M, interpolation='nearest', cmap='Reds', vmin=0)\n",
        "    ax3.axis(\"off\")\n",
        "    draw_blocks(ax3, M)\n",
        "    draw_border(ax3, M)\n",
        "    # pl.tight_layout()\n",
        "\n",
        "def plot2D_samples_mat(xs, xt, G, thr=1e-8, **kwargs):\n",
        "    r\"\"\" Plot matrix :math:`\\mathbf{G}` in 2D with lines using alpha values\n",
        "\n",
        "    Plot lines between source and target 2D samples with a color\n",
        "    proportional to the value of the matrix :math:`\\mathbf{G}` between samples.\n",
        "\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    xs : ndarray, shape (ns,2)\n",
        "        Source samples positions\n",
        "    b : ndarray, shape (nt,2)\n",
        "        Target samples positions\n",
        "    G : ndarray, shape (na,nb)\n",
        "        OT matrix\n",
        "    thr : float, optional\n",
        "        threshold above which the line is drawn\n",
        "    **kwargs : dict\n",
        "        parameters given to the plot functions (default color is black if\n",
        "        nothing given)\n",
        "    \"\"\"\n",
        "\n",
        "    if ('color' not in kwargs) and ('c' not in kwargs):\n",
        "        kwargs['color'] = 'k'\n",
        "    mx = G.max()\n",
        "    if 'alpha' in kwargs:\n",
        "        scale = kwargs['alpha']\n",
        "        del kwargs['alpha']\n",
        "    else:\n",
        "        scale = 1\n",
        "\n",
        "    eps = 0.2\n",
        "    for i in range(xs.shape[0]):\n",
        "        for j in range(xt.shape[0]):\n",
        "            if G[i, j] / mx > thr:\n",
        "                alpha =  G[i, j] / mx * scale\n",
        "                if not np.isclose(alpha,0):\n",
        "                  alpha = np.minimum(alpha + eps, 1)\n",
        "                pl.plot([xs[i, 0], xt[j, 0]], [xs[i, 1], xt[j, 1]],\n",
        "                        alpha=alpha, **kwargs)\n",
        "\n"
      ],
      "metadata": {
        "id": "I83uQCU3HXjk"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# K-sparse OT"
      ],
      "metadata": {
        "id": "nIypCcl-5lu7"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "\"\"\"Projection with k-sparse constraints.\"\"\"\n",
        "from typing import Callable, Any\n",
        "import jax\n",
        "import jax.numpy as jnp\n",
        "import jaxopt\n",
        "from jaxopt._src.projection import projection_sparse_simplex, projection_transport, _make_semi_dual #, _regularized_transport_semi_dual\n",
        "\n",
        "\n",
        "\n",
        "def _max_l2_top_k(x, k, marginal_b=1.0, gamma=1.0):\n",
        "  scale = gamma * marginal_b\n",
        "  p = jaxopt.projection.projection_sparse_simplex(x / scale, k)\n",
        "  p = jax.lax.stop_gradient(p)\n",
        "  z = jnp.dot(p, x) - 0.5 * scale * jnp.dot(p, p)\n",
        "  return z\n",
        "\n",
        "_max_l2_top_k_grad = jax.grad(_max_l2_top_k)\n",
        "\n",
        "\n",
        "def _regularized_transport_semi_dual(cost_matrix,\n",
        "                           marginals_a,\n",
        "                           marginals_b,\n",
        "                           make_solver,\n",
        "                           max_vmap,\n",
        "                           max_grad_vmap,\n",
        "                           gamma=1.0):\n",
        "\n",
        "  r\"\"\"Regularized transport in the semi-dual formulation.\n",
        "\n",
        "  Args:\n",
        "    cost_matrix: The cost matrix of size (m, n).\n",
        "    marginals_a: The marginals of size (m,)\n",
        "    marginals_b: The marginals of size (n,)\n",
        "    make_solver: A function that makes the optimization algorithm\n",
        "    max_vmap:  A function that computes the regularized max on columns of\n",
        "      its matrix-valued input\n",
        "    max_grad_vmap:  A function that computes gradient of regularized max\n",
        "      on columns of its matrix-valued input\n",
        "    gamma: A parameter that controls the strength of regularization.\n",
        "\n",
        "  Returns:\n",
        "    The optimized plan. See the text under Eqn. (10) of\n",
        "      https://arxiv.org/abs/1710.06276\n",
        "  \"\"\"\n",
        "  size_a, size_b = cost_matrix.shape\n",
        "\n",
        "  if len(marginals_a.shape) >= 2:\n",
        "    raise ValueError(\"marginals_a should be a vector.\")\n",
        "\n",
        "  if len(marginals_b.shape) >= 2:\n",
        "    raise ValueError(\"marginals_b should be a vector.\")\n",
        "\n",
        "  if size_a != marginals_a.shape[0] or size_b != marginals_b.shape[0]:\n",
        "    raise ValueError(\"cost_matrix and marginals must have matching shapes.\")\n",
        "\n",
        "  if make_solver is None:\n",
        "    make_solver = lambda fun: LBFGS(fun=fun, tol=1e-3, maxiter=500,\n",
        "                                    linesearch=\"zoom\")\n",
        "\n",
        "  semi_dual = _make_semi_dual(max_vmap, gamma=gamma)\n",
        "  solver = make_solver(semi_dual)\n",
        "  alpha_init = jnp.zeros(size_a)\n",
        "\n",
        "  # Optimal dual potentials.\n",
        "  alpha = solver.run(alpha_init,\n",
        "                     cost_matrix=cost_matrix,\n",
        "                     marginals_a=marginals_a,\n",
        "                     marginals_b=marginals_b).params\n",
        "\n",
        "  # Optimal primal transportation plan.\n",
        "  X = alpha[:, jnp.newaxis] - cost_matrix\n",
        "  P = max_grad_vmap(X, marginals_b, gamma).T * marginals_b\n",
        "\n",
        "  return P, alpha\n",
        "\n",
        "\n",
        "def k_sparse_projection_transport(sim_matrix: jnp.ndarray,\n",
        "                                  marginals_a: jnp.ndarray,\n",
        "                                  marginals_b: jnp.ndarray,\n",
        "                                  k: int,\n",
        "                                  row_k_sparse: bool = False,\n",
        "                                  make_solver: Callable[..., Any] = None,\n",
        "                                  gamma=1.0,\n",
        "                                  return_alpha=False):\n",
        "  r\"\"\"Projection onto the transportation polytope with k-sparse constraints.\n",
        "\n",
        "  Args:\n",
        "    sim_matrix: similarity matrix, shape=(size_a, size_b).\n",
        "    marginals_a: marginals a, shape=(size_a,).\n",
        "    marginals_b: marginals b, shape=(size_b,).\n",
        "    k: number of nonzeros that each row (if row_k_sparse is True) or\n",
        "    column (if row_k_sparse is False) can have at most.\n",
        "    row_k_sparse: if True, each row of transportation plan has at most k\n",
        "      nonzeros; else, each column of transportation plan has at most k\n",
        "      nonzeros.\n",
        "    make_solver: a function of the form make_solver(fun),\n",
        "      for creating an iterative solver to minimize fun.\n",
        "    gamma: a parameter that controls the strength of squared l2 regularization.\n",
        "  Returns:\n",
        "    plan: transportation matrix, shape=(size_a, size_b).\n",
        "  References:\n",
        "    Smooth and Sparse Optimal Transport.\n",
        "    Mathieu Blondel, Vivien Seguy, Antoine Rolet.\n",
        "    In Proceedings of Artificial Intelligence and Statistics (AISTATS), 2018.\n",
        "    https://arxiv.org/abs/1710.06276\n",
        "  \"\"\"\n",
        "\n",
        "  def maxop(x, marginal_b, gamma):\n",
        "    return _max_l2_top_k(x, k=k, marginal_b=marginal_b, gamma=gamma)\n",
        "\n",
        "  maxop_vmap = jax.vmap(maxop, in_axes=(1, 0, None))\n",
        "  max_grad_vmap = jax.vmap(jax.grad(maxop), in_axes=(1, 0, None))\n",
        "\n",
        "  if row_k_sparse:\n",
        "    # enforce sparsity constraint rowwise:\n",
        "    marginals_a, marginals_b = marginals_b, marginals_a\n",
        "    sim_matrix = sim_matrix.T\n",
        "\n",
        "  plan, alpha = _regularized_transport_semi_dual(cost_matrix=-sim_matrix,  # pylint: disable=protected-access\n",
        "                                           marginals_a=marginals_a,\n",
        "                                           marginals_b=marginals_b,\n",
        "                                           make_solver=make_solver,\n",
        "                                           max_vmap=maxop_vmap,\n",
        "                                           max_grad_vmap=max_grad_vmap,\n",
        "                                           gamma=gamma)\n",
        "  if row_k_sparse:\n",
        "    plan = plan.T\n",
        "\n",
        "  if return_alpha:\n",
        "    return plan, alpha\n",
        "  else:\n",
        "    return plan"
      ],
      "metadata": {
        "id": "yqhRUtFI5nqt"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YAWYXlCRub7a"
      },
      "source": [
        "## Generate data\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def make_1D_gauss(n, m, s):\n",
        "    \"\"\"return a 1D histogram for a gaussian distribution (`n` bins, mean `m` and std `s`)\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    n : int\n",
        "        number of bins in the histogram\n",
        "    m : float\n",
        "        mean value of the gaussian distribution\n",
        "    s : float\n",
        "        standard deviaton of the gaussian distribution\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    h : ndarray (`n`,)\n",
        "        1D histogram for a gaussian distribution\n",
        "    \"\"\"\n",
        "    x = np.arange(n, dtype=np.float64)\n",
        "    h = np.exp(-(x - m) ** 2 / (2 * s ** 2))\n",
        "    return h / h.sum()\n",
        "\n",
        "\n",
        "def make_1d_bi_gauss(n, mean_std_1, mean_std_2, mix_weights =0.5):\n",
        "    \"\"\"return a 1D histogram for a gaussian distribution (`n` bins, mean `m` and std `s`)\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    n : int\n",
        "        number of bins in the histogram\n",
        "    m : float\n",
        "        mean value of the gaussian distribution\n",
        "    s : float\n",
        "        standard deviaton of the gaussian distribution\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    h : ndarray (`n`,)\n",
        "        1D histogram for a gaussian distribution\n",
        "    \"\"\"\n",
        "    m1, s1 = mean_std_1\n",
        "    m2, s2 = mean_std_2\n",
        "\n",
        "    x = np.arange(n, dtype=np.float64)\n",
        "    h1 = np.exp(-(x - m1) ** 2 / (2 * s1 ** 2))\n",
        "    h2 = np.exp(-(x - m2) ** 2 / (2 * s2 ** 2))\n",
        "\n",
        "    assert (mix_weights <= 1) and (mix_weights >=0)\n",
        "    h = mix_weights * h1 + (1 - mix_weights) * h2\n",
        "    return h / h.sum()\n",
        "\n",
        "\n",
        "\n",
        "def make_2D_samples_gauss(n, m, sigma, random_state=None):\n",
        "    r\"\"\"Return `n` samples drawn from 2D gaussian :math:`\\mathcal{N}(m, \\sigma)`\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    n : int\n",
        "        number of samples to make\n",
        "    m : ndarray, shape (2,)\n",
        "        mean value of the gaussian distribution\n",
        "    sigma : ndarray, shape (2, 2)\n",
        "        covariance matrix of the gaussian distribution\n",
        "    random_state : int, RandomState instance or None, optional (default=None)\n",
        "        If int, random_state is the seed used by the random number generator;\n",
        "        If RandomState instance, random_state is the random number generator;\n",
        "        If None, the random number generator is the RandomState instance used\n",
        "        by `np.random`.\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "    X : ndarray, shape (`n`, 2)\n",
        "        n samples drawn from :math:`\\mathcal{N}(m, \\sigma)`.\n",
        "    \"\"\"\n",
        "\n",
        "    generator = check_random_state(random_state)\n",
        "    if np.isscalar(sigma):\n",
        "        sigma = np.array([sigma, ])\n",
        "    if len(sigma) > 1:\n",
        "        P = sp.linalg.sqrtm(sigma)\n",
        "        res = generator.randn(n, 2).dot(P) + m\n",
        "    else:\n",
        "        res = generator.randn(n, 2) * np.sqrt(sigma) + m\n",
        "    return res\n",
        "\n",
        "\n",
        "def check_random_state(seed):\n",
        "    r\"\"\"Turn `seed` into a np.random.RandomState instance\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    seed : None | int | instance of RandomState\n",
        "        If `seed` is None, return the RandomState singleton used by np.random.\n",
        "        If `seed` is an int, return a new RandomState instance seeded with `seed`.\n",
        "        If `seed` is already a RandomState instance, return it.\n",
        "        Otherwise raise ValueError.\n",
        "    \"\"\"\n",
        "    if seed is None or seed is np.random:\n",
        "        return np.random.mtrand._rand\n",
        "    if isinstance(seed, (int, np.integer)):\n",
        "        return np.random.RandomState(seed)\n",
        "    if isinstance(seed, np.random.RandomState):\n",
        "        return seed\n",
        "    raise ValueError('{} cannot be used to seed a numpy.random.RandomState'\n",
        "                     ' instance'.format(seed))\n",
        "\n",
        "\n",
        "def dist(x1, x2=None, metric='sqeuclidean', p=2, w=None):\n",
        "    r\"\"\"Compute distance between samples in :math:`\\mathbf{x_1}` and :math:`\\mathbf{x_2}`\n",
        "\n",
        "    .. note:: This function is backend-compatible and will work on arrays\n",
        "        from all compatible backends.\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "\n",
        "    x1 : array-like, shape (n1,d)\n",
        "        matrix with `n1` samples of size `d`\n",
        "    x2 : array-like, shape (n2,d), optional\n",
        "        matrix with `n2` samples of size `d` (if None then :math:`\\mathbf{x_2} = \\mathbf{x_1}`)\n",
        "    metric : str | callable, optional\n",
        "        'sqeuclidean' or 'euclidean' on all backends. On numpy the function also\n",
        "        accepts  from the scipy.spatial.distance.cdist function : 'braycurtis',\n",
        "        'canberra', 'chebyshev', 'cityblock', 'correlation', 'cosine', 'dice',\n",
        "        'euclidean', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis',\n",
        "        'matching', 'minkowski', 'rogerstanimoto', 'russellrao', 'seuclidean',\n",
        "        'sokalmichener', 'sokalsneath', 'sqeuclidean', 'wminkowski', 'yule'.\n",
        "    p : float, optional\n",
        "        p-norm for the Minkowski and the Weighted Minkowski metrics. Default value is 2.\n",
        "    w : array-like, rank 1\n",
        "        Weights for the weighted metrics.\n",
        "\n",
        "\n",
        "    Returns\n",
        "    -------\n",
        "\n",
        "    M : array-like, shape (`n1`, `n2`)\n",
        "        distance matrix computed with given metric\n",
        "\n",
        "    \"\"\"\n",
        "    if x2 is None:\n",
        "        x2 = x1\n",
        "    if metric == \"sqeuclidean\":\n",
        "        return euclidean_distances(x1, x2, squared=True)\n",
        "    elif metric == \"euclidean\":\n",
        "        return euclidean_distances(x1, x2, squared=False)\n",
        "    else:\n",
        "        if not get_backend(x1, x2).__name__ == 'numpy':\n",
        "            raise NotImplementedError()\n",
        "        else:\n",
        "            if metric.endswith(\"minkowski\"):\n",
        "                return cdist(x1, x2, metric=metric, p=p, w=w)\n",
        "            return cdist(x1, x2, metric=metric, w=w)"
      ],
      "metadata": {
        "id": "ve7P3dBlpaMu"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Synthetic 1D dataset"
      ],
      "metadata": {
        "id": "AN9me6Bn31dR"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.metrics.pairwise import euclidean_distances\n",
        "import scipy as sp\n"
      ],
      "metadata": {
        "id": "pJfCvxzh4n3W"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "1v3xlhv6ub7a"
      },
      "outputs": [],
      "source": [
        "def make_synthetic_1d_bi_gaussian_dataset():\n",
        "  n = 32 # nb bins\n",
        "\n",
        "  # Gaussian distributions\n",
        "  marginals_a = make_1D_gauss(n, m=16, s= 5 )\n",
        "  marginals_b = make_1d_bi_gauss(n, (8, 5), (24, 5))\n",
        "  x = np.arange(n, dtype=np.float64)\n",
        "\n",
        "  # cost matrix\n",
        "  cost_matrix = dist(x.reshape((n, 1)), x.reshape((n, 1)))\n",
        "  cost_matrix /= cost_matrix.max()\n",
        "\n",
        "  dataset = {'marginals_a': marginals_a,\n",
        "                          'marginals_b': marginals_b,\n",
        "                          'cost_matrix': cost_matrix}\n",
        "  return dataset\n",
        "\n",
        "synthetic_1d_bi_gaussian_dataset = make_synthetic_1d_bi_gaussian_dataset()\n",
        "\n",
        "\n",
        "def make_synthetic_1d_gaussian_dataset():\n",
        "  n = 32 # nb bins\n",
        "\n",
        "  # Gaussian distributions\n",
        "  marginals_a = gauss(n, m=10, s=4)  # m= mean, s= std\n",
        "  marginals_b = gauss(n, m=16, s=5)\n",
        "  x = np.arange(n, dtype=np.float64)\n",
        "\n",
        "  # cost matrix\n",
        "  cost_matrix = dist(x.reshape((n, 1)), x.reshape((n, 1)))\n",
        "  cost_matrix /= cost_matrix.max()\n",
        "\n",
        "  dataset = {'marginals_a': marginals_a,\n",
        "             'marginals_b': marginals_b,\n",
        "             'cost_matrix': cost_matrix}\n",
        "  return dataset\n",
        "\n",
        "synthetic_1d_gaussian_dataset = make_synthetic_1d_gaussian_dataset()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Synthetic 2D dataset"
      ],
      "metadata": {
        "id": "NU5MmssB36Uw"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "def make_synthetic_2d_dataset():\n",
        "\n",
        "  n = 20 # nb samples\n",
        "\n",
        "  mu_s = np.array([0, 0])\n",
        "  cov_s = np.array([[1, 0], [0, 1]])\n",
        "\n",
        "  mu_t = np.array([4, 4])\n",
        "  # cov_t = np.array([[1, -.8], [-.8, 1]])\n",
        "  cov_t = np.array([[1, -.8], [-.6, 1]])\n",
        "\n",
        "  xs = make_2D_samples_gauss(n, mu_s, cov_s)\n",
        "  xt = make_2D_samples_gauss(n, mu_t, cov_t)\n",
        "\n",
        "  a, b = np.ones((n,)) / n, np.ones((n,)) / n  # uniform distribution on samples\n",
        "\n",
        "  marginals_a = a/a.sum()\n",
        "  marginals_b = b/b.sum()\n",
        "  # loss matrix\n",
        "  cost_matrix = dist(xs, xt)\n",
        "\n",
        "  dataset = {'xs': xs,\n",
        "             'xt': xt,\n",
        "             'marginals_a': marginals_a,\n",
        "             'marginals_b': marginals_b,\n",
        "             'cost_matrix': cost_matrix}\n",
        "  return dataset\n",
        "synthetic_2d_dataset = make_synthetic_2d_dataset()"
      ],
      "metadata": {
        "id": "3I3_avzw39C2"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VUcwvcQfub7b"
      },
      "source": [
        "## Plot distributions and loss matrix\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "save = False\n",
        "\n",
        "width  = 390 / 72 / 2 #390/6 pt in inches\n",
        "\n",
        "ot_formulation_to_alg = {'emd': ot.emd,\n",
        "                         'kl': ot.emd}"
      ],
      "metadata": {
        "id": "RmlFhaGwOd11"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# 1D Experiments:"
      ],
      "metadata": {
        "id": "hrJm6b4V6eoH"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "for dataset in [synthetic_1d_gaussian_dataset, synthetic_1d_bi_gaussian_dataset]:\n",
        "\n",
        "  a = dataset['marginals_a']\n",
        "  b = dataset['marginals_b']\n",
        "  M = dataset['cost_matrix']\n",
        "\n",
        "  P_unregularized = ot.emd(a, b, M)\n",
        "  sparsity = 1 - jnp.count_nonzero( P_unregularized )/jnp.size(P_unregularized)\n",
        "\n",
        "  pl.figure(figsize=(width, width))\n",
        "  plot1D_mat(a, b, P_unregularized, f'Unregularized, sparsity: {sparsity}')\n",
        "\n",
        "  if save:\n",
        "    pl.savefig(\"emd_1d.pdf\", dpi=300, transparent=True)\n",
        "    files.download(\"emd_1d.pdf\")\n",
        "\n",
        "  P_kl = ot.smooth.smooth_ot_dual(a, b, M, 2e-3, reg_type='kl')\n",
        "\n",
        "  pl.figure(figsize=(width, width))\n",
        "  plot1D_mat(a, b, P_kl, f'KL, sparsity: {sparsity}')\n",
        "  sparsity = jnp.sum(P_kl == 0)/jnp.size(P_kl)\n",
        "\n",
        "  if save:\n",
        "    pl.savefig(\"kl_plan_1d.pdf\", dpi=300, transparent=True)\n",
        "    files.download(\"kl_plan_1d.pdf\")\n",
        "  pl.show()\n",
        "\n",
        "\n",
        "  P_l2 = ot.smooth.smooth_ot_dual(a, b, M, 1e-1, reg_type='l2')\n",
        "  sparsity = jnp.sum(P_l2 == 0)/jnp.size(P_l2)\n",
        "  pl.figure(figsize=(width, width))\n",
        "  plot1D_mat(a, b, P_l2, f'Squared l2, sparsity: {sparsity}')\n",
        "\n",
        "\n",
        "  P_k2 = k_sparse_projection_transport(sim_matrix=-M,\n",
        "                                marginals_a=a,\n",
        "                                marginals_b=b,\n",
        "                                k=2,\n",
        "                                row_k_sparse=False)\n",
        "\n",
        "  sparsity = jnp.sum(P_k2 == 0)/jnp.size(P_k2)\n",
        "  pl.figure(figsize=(width, width))\n",
        "  plot1D_mat(a, b, P_k2, f'Col-k-sparse, k=2, sparsity: {sparsity}')\n",
        "\n",
        "  if save:\n",
        "    pl.savefig(\"k_sparse_1d_k2.pdf\", dpi=300, transparent=True)\n",
        "    files.download(\"k_sparse_1d_k2.pdf\")\n",
        "  pl.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "elS5cmYYG-m1",
        "outputId": "97d40669-a5b3-44f7-85a9-1991ed775f79"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "P_k1, alpha_k1 = k_sparse_projection_transport(sim_matrix=-M,\n",
        "                              marginals_a=a,\n",
        "                              marginals_b=b,\n",
        "                              k=1,\n",
        "                              make_solver=lambda fun: jaxopt.LBFGS(fun=fun, tol=1e-8, maxiter=1000, linesearch=\"zoom\"),\n",
        "                              return_alpha=True)\n",
        "\n",
        "pl.figure(figsize=(width, width))\n",
        "plot1D_mat(a, b, P_k1, f'Col-k-sparse, k=1')"
      ],
      "metadata": {
        "id": "RMLU9afkTMEk",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 251
        },
        "outputId": "2aada697-6101-4694-b014-dcc6d046ab3c"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAACxCAYAAABUZybaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAan0lEQVR4nO2deZhUxbmH3+IAMjDAMAMIzDDIVW+i4h7B9UZJRCPB5ep1aROjUUpjjF7bqDHXLS4hMabVmIgWIRiXTjQaF1wxghpj4hqNRFYDMwybppkWGbbhcO4fVT19Zpient77MPU+Tz9zuk6dOl/3/LrOV8tXJTzPw2Ipd3qV2gCLpTtYoVoCgRWqJRBYoVoCgRWqJRBYoVoCgRVqGoQQRwshmro4f6MQ4qFi2lQq0n0XhaTHCFUIERJCvCOE2CCEWC2EeF4IcWSp7eppCCH6CiEeE0IsF0J4Qoiju3NdjxCqECIM3An8GNgVqAfuAU4qpV2FQgjhlNqGNLwOfANY090LdnqhCiEGAzcB3/U874+e57V4ntfqed5sz/OuNHl2EULcKYRYZV53CiF2yeJefYQQvxNCPC6E6NvJ+X5CiIeEEDEhRFwI8bYQYldz7hUhxDQhxFtCiPVCiKeEENW+a/8ghFgjhPhMCPGaEGIf37n7hRDThRDPCSFagGOEECcIIT4SQnwuhFgphPi+L//XhRDvGxveEELsl+lnNeVcau5R191rPM/b6nnenZ7nvQ643b1upxcqcBjQD3iiizz/BxwKHADsD4wHrs3kJkKICuBJYAtwuud5WzvJ9i1gMDAaqAEuAjb5zp8DfBsYCWwDfuE79zywJzAceA94uEPZIeBWYCC6xpoJXOh53kBgHDDX2Hkg8BvgQmPDfcDTmf4whRDXA+cCX/Y8r0kIUW+En+oVyqT8HfA8b6d+AWcDa9Lk+Rg4wff+OGC5OT4aaOri2huBp4FX0cISXeT9NvAGsF8n514BfuJ7vzewFXA6yVsFeMBg8/5+4IEOeRrRYhzUIX06cHOHtEVGcOm+y6OBlUAE/WMYnOP/pgk4ujt5e0KNGgOGCiF6d5FnFNDge99g0tohhDjbNMY2CCGe9506FNgPLTTPl3+D71UPPAi8CPzeuBi3CSH6+MpZ0cGGPsZ2RwjxEyHEx0KI9cByk2doimsBTgVOABqEEK8KIQ4z6WOAK/y1HbqG3+HzpqAKkMA0z/M+6+Y1OdMThPpX9OP45C7yrEL/AxPUm7R2eJ73sOd5leb1Nd+pOcA04OWEz2nyV/pejZ72jX/ked7ewOHA19GP+wSjO9jQCvwb/Vg/Cfgq2nXYzeQRfvM62Pq253knoV2FJ4FHzakVwK2e51X5Xv09z/td6q+nHc3G7llCiCMSiebRv6GL19ndLL9Tdnqhml/99cCvhBAnCyH6m0bP14QQt5lsvwOuFUIME0IMNfkz6hv1PO82IIoW69DO8gghjhFC7Gta5evRQtzuy/INIcTeQoj+6AbgY57nuWi/cwv66dAf3XuREtMFdLYQYrDnea3mXon7zAAuEkJMEJoBQojJQoiB5tr7hRD3p/msr6Bdqj8KIcabtMYOP8yOrzaf2jRe+5m3fU0jU+x4p/Y37REv88W+A7Sgu0WeBQ435/qh/cvV5vULoJ/PL0vnoz7ke38L8D5Q3Unes9D+YAuw1tynt5f0UacBbxlhzQaGmnOVwFPA52iX4Bx0DbqHl/RRb/Hdpy/wArr2Ww+8DRzpO3+8SYubz/sHYKA59zIwNcVnbfddAJPN5zgow//FcmO//7VbV9cIz2v3xLCUCCHEK2jB/7qENvQFPkA39lpLZUdndNXAsPQwPN2ltlep7eiMnd5Htewc2Ee/JRDYGtUSCKxQLYHANqbyiBsJ9QK+gh65mQAsQ4+xvwy84YSj27u4vOS4kVAf4ChgonnVAq+h5wP8xQlHS+YnWh81T7iR0OnojvjdU2R5CzjFCUd3GPEqB9xIaA90X+3eKbJ8BFzhhKMvFM+qJFaoecCNhM5Dz0hKRxPwdScc/aDAJmWEGwkdiR5mrUmTdRtwmhOOPlV4q9pjfdQccSOhs9BT6hLE0SNOh6JHw2aRnHdZB7zuRkJfo0xwI6Ez0a5JQqRbgHuB/wGORA+5tphzvYFH3UjouGLbaWvUHHAjoVPQw4+JGfXvAxOdcLS5Q75JJt8gk7QVONwJR98tlq2d4UZCX0FPqElUWJ8CJzrh6N865BuF9lUTbs1m4AQnHJ1XLFutULPEjYR2Bz4EKkzSR8DRTjj6aYr844BnSM7SWg4c7ISj6wpsaqe4kVAt8HdgmElaAEx2wtFlKfKPQYu13iStA/Z2wtG1hbYV7KM/K9xISKBbwgmRLgW+mkqkAE44Oh89TW+9SdoN+K3pKSgqpnX/KEmRrkE/CToVKYATjjagewJWm6RqdBxaUbBCzY5vobuhQE+fO9MJR1d3kR8AJxxdig7fSPB14Kq8W5een6Lnw4L2n890wtG0gXZOOPox7e0/042ETsi/eTtiH/0Z4kZCw9GPyUTgXcQJR6/IsIzbgcQ124EJTjj6Tv6s7PLex6GnACa42glHb0uVP0UZDwDfNG9XAPs44ejneTKxU2yNmjl3khTpcvQk60y5BviLOe4F/MaNhHaIWs03biQ0EFC+pNnA7VkUFUZHHoCOSrglR9PSYoWaAW4kdDh68nOCi5xwtCVV/lQ44Wgr2n1IRKDuS3FcgFtp3xi6IJvRMicc/TdwuS/pEjcS+mIe7EuJFWpm3Ow7fsQJR1/MtiDj7/lDsq9zI6FUo0I540ZCRwCX+JIuc8LRT3Io8mF0/ytoHd2YQ1lpsULtJm4klBj/Bt0AySjuPwV3oYdWQYeP/NqNhPK+yokbCfUDfk0yGPB5dlwXICPMuP81vqQz3Egoq4UsuoMVajcw3VH+2nSWacHnhBOOusD56CA/0ItlfDfXcjvhWiDxaN6AdllybkU74ejb6PkBCW7KtcxUWKF2j+NJdudspb1oc8L0r97qS5rmRkJj81W+GwkdAPzAl3S1E4425qt82jcmT3IjoUPyWHYbVqhpMLWpv1Wr8vyPBh19Ot8c9weUuW9OmI7935Ac4n0NPY6fN5xw9B/AI76kgvQAWKGmZzJwkDneTJqY+mxwwtGt6OV+Ei3wrwLn5aHoK4ADzfFmYGqB5sTeSNL2SW4kNCHfN7BC7QJTq/kbDNO7MwKVDcbfi/iSIm4kVJ8qfzrM3IIbfUk3OOHo4mzL6wonHF2IXnwjwTWp8maLFWrXHEXSN20Ffl7g+92AnjcAeumeP7iRUMbLX5qO/ceAxLXv0v5HUAh+4js+yY2E9kmZMwusULvGXzM84ISjKwt5Mycc3YgeCNhmksaTocDMU2Am8AWTtBH4lhOObkt9Ve444eg/0asaJsjrAIYVagrcSOhAdGsf9JIzGY2HZ4sTjr4BXOlLutiNhDJZW/RS9KTnBFONiIrBNN9xyEwNzAtWqKnxd+k8Vij/LgV3oSdaJ5hhJl93iRsJnUb7sft7nHA0mip/vjETrl81b3sD3+8ie0ZYoXaCCXQ7zZc0LVXeQmA64y8AEj+O/sBzbiR0QWf53UhIuJHQVWhxJyKL30JPHik2/u/qAjPbLGesUDvnKpLfzRwnHP17sQ1wwtH16DVRE9vlOOia9Q7zQ0oIdB+0T/pT3+WL0EF4W4pps2EOOnIA9CqJl+ajUDsftQMmPmgZeuwd4BgnHH2lxPY8Q7I/NMFCtI3/0SH9NXRYdklCXKAtdDwxCPAZUG9+eFlja9QduZykSP0+V0kw6wD8F/Bch1NfZEeRPgxMKqVIDY8DS8zxYPReAjlha1QfbiQ0BL1JQ6VJOskJR5/u4pKi4UZCvdFLpJ+GHrlKxGttQM/YfxTd6CuLf6jxp2eYt2uAsU44ujnb8uySPu35LkmRfoR+5JYFph/0AeABNxLqDxyB7m99o0S+aDoeBH6E3sRiBLp/+L5sC7M1qsH88xtI7jRyjhOOPlhCkwKPGwldQbK77F/AF7IdeLA+apKLSIq0Afh9CW3ZWVDofQRA+9NndZG3S6xQATcSGgBc7Uu6zcQ1WXLARKbe5Uu63vjaGWOFqrkYvR8T6PDfmV3ktWTGnej1uAD2QG/WmzE9XqhmppG/Nr2lTBsngcQJRz+j/bDu9WZCd0b0eKGiIzMTK9ktR+/ZZMkvd6PDswHGonsAMqJHC9WNhAbRfqbSzWa2vSWPmFGpn/mSMo7g7dFCBX4IDDHH/0L3/VkKwy9Jrq6S8fS/HitUM7HDv9rHDbalXziccHQDyTm9GQ/x9uSRqZ/Tfky/aPM2ezD3mL8ZR8L2yJEpMwnZvxzPeBNcZylTeuqj378A7Swr0vKnpwo1sTHt5+gGlaXM6alCTXBzd1ZatpSenirUU9A+6l3pMlrKgx7ZmLIEj55ao1oChhWqJRBYoVoCgRWqJRBYoVoCgRWqJRBYoVoCgRWqJRAEfpqfUmoBya1pxkkpu7UW6P2zZnk1Q6oKZ5ilU2LNcc4947+h/+CMNtMIvFBJ7ksKGUzIrRlSxZRJE9NntOSV2XPmZnVdoB/9SilBe6E2p8prCTaBFip6najEU2GjlDLrRbgs5U3QhTrKd5zLBrSWMifoQvVHMzaUzApLwdmZhJrvbR8tZUTQW/3jfMdLUubqhFhzvK0FusfYMey15+75tMuSZ4Iu1IN8xxltCOFt24oX/4R1JpLfCrW8CeyjXynVGzjAl/ReJtfX9IHJNR7VGS/XZSkFgRUqcCTJZcxXABltphtrhWdjoq1GtZQ3QX70T/EdPyOlzCj4S/Tui6iqogbto1rKm0AKVSnloCNJE8zOtAw7hBosAilUdG061hzHgXnZFrRgyccsXZbsgrU9AOVJUIV6he/4vlyGTpcuayC2dg3V3hbWCb29vRVq+RG4xpRS6qvohhTofZbuzrXMam8Lk1tXUO3ZFdHLlUAJVSnVn/abaj0kpVyZa7nrxC4822d0W41qKT+C9ui/nuT+n3HgmlwL9Lf4bQ9A+RIYoSqlJtN+vf0rpZQ5L3C21567W580AARCqEqp/dE76SVclVeB3+T7PrYHoHwpe6EqpWrRm+cmRqEagTOllNvzfa+lyxqIrV5F9eb1rOs3CLA9AOVCWTemlFK7A68BdSZpPTA5H4/8VFRvXs8JDW9SvXl9oW5hyYKyrVGVUgcCzwO7miQXOF1KOb+Q913XbxDPjZnApxWDcexUwLKhLIWqlJoIPAEMMkmb0SJ9MfVVuZNs8Y/CaY7jbtrEtpUNxKv0xn5WqKWjrISqlOqFXlP/RyTdkjgwRUr5eqHv7+8BmD1nLttWNvCVeU/z8jEnQl1dmqsthaRshKqUGo7eOW+SL3k1cJyU8sNS2BSvquHlY05kXfUw6waUmLIQqnnUP0j7qNI/A2flY+QpG9rcgLo6nOY42zZupGXpUlp21S6zFWpxKalQlVKDgJ8CF3U4NQ24Xkq5rfhWaTq6AS1LlzLu4Sjzzw5B/ehSmdVjKZlQlVLHAwrw/9djwDeklC+UxqrUtOy6K/PPDvH5qFFstm5A0Sm6UJVSNcDtwLkdTj0FXCylXFVsm9LR5gbUj2Zzc5ytLRuJLVpM68gRgHUDikHRhGpa9OehH/U1vlP/Bi4BHs00nKRYdHQDYosWUzNjFrGp58GY+hJb1zMoilCVUvsB04HDO5x6BPielPLTYtiRL1pHjiA29Ty21tW2Wx9g46ZN9K+oAKxLkG8KKlSl1EDgRuAywPGdWg5cKqXMONap1LS5AWPqiTXH2dLSQtOCRfSqHcl2D1Y1raJfne68sELNHwURqlkO8lT0Ls61vlOtwM+AW6WUGwtx70LT0Q1oWrCITb+cQcUlU9m83aPxjnupv/wi2M26BPkk70JVSu2BDg85vsOpeejG0sJ837OU9KodScUlU+lVO5J+HtRffhEVY0bbJYPyTN6EqpTqA1wNXAv4YzrWooPxouXaWMoWvxsAxkfdTbsEm1taWDx/ARWj9QPFCjU38iJUpdQ44Le0XwvKA+4BrpVSxvNxn3IjVXTA7DlzWTx/AUsi09kz/B3rBuSBnIRq1n+6Ej2JxL+K07vARVLKd3IpP8hUjK5lz/B32mpY6wbkRtZCVUqNRXcvHeJL3gJcB0SklG6OtgWWNpfA5wYs+edCKmxvQNZkJVSl1FHAH4GhvuS3gHOllAvyYViQ6dgzsOSfC1kWmc5Y6wZkTcZCVUp9G7iX5KN+K3ADcHspJ5GUMxV1oxgb/g79O/QG2AGC7tNtoZq+0R8DP/AlfwKcLKX8a74N21no6AZsaWmh8aNFOLUj6SVgw6o1uKPsnIF0ZBLcN5X2Iv0HMN6KtGv22nN3pkyayJRJE6kZUsW2hibW361wV67GWbWGAffNxFlVsFjFnYZu1ahKqUNov8bTs+iQ5Q0FsWonxqkdyaDvSZzakbgCWi48H3d053MGrGuQJK1QlVLVwONAX5P0ATrQLpBDoKXE7waAEaSZM9C6cSPxxUvYMmIEQkALuiO672cx4kOGsu3D99nrinDJbC813alRLyQ5uTkOnGpFmh1dDRDEFy9hzMwHaDj/HHbpnfTIjnn1aeYde8oO1/Q0uiNU/5j9lVLKjwtlTE9my4gRNJx/DltGjGCrAIGuUecdewrraobTa/v2TnsLeop70KVQlVKVwGG+pMBNywsCyTkD+sHl91F714/Wawxs34674EOaB+k9infZ0Exz5RB9vH4dzYOqcRd8yF6XXVaSz1Bo0tWo40j2ly6WUq4tsD09knQrCiZq0onPzOSl8foBN+n9PzHnoGMBOPatF9rSd1bSCbXJdzxGKVUhpdxUSIMsnRNrjvPS+OPbatQ5Bx3bVqO+NP54YoOH0svbed2DLoUqpWxSSi0A9kJP3TsKmFMMwyxJ2lyDIVUMRQvPqa1td5xwD7Z9+D7xIXpkW6xdy4Zhw/GAravXsGXECOJvvs1e111dqo+SNd1pTL2EFirAj5VSr+WyuYMlc7qz2HCiJj3qt3e19RLs99gjvHvaGQCMMD0KQaU7Qp0JXGzyHgz8ApCFNMqSHbHmOPOOPaWtRn33tDPaatQt55/D5tpahOsGcq5B2iFUKeU/gMt9SVOVUpcUziRLNuwxdgw1Q6rove8BDK2ro39NDRUHH8yw+tFUDhtK1YRD6DOgP6JyAJ/89S1WNzTy2Sef0viXN1m5vJG5Dz1a6o/QJd2dlPIrdDdVyLy/Wym1G3B1T553Wk5k4h603DeTlgvPByB2t2LQ98r/ASk8r3thTEqpAei18w/2JT8LhKSUgVueefaTT3g9bYvJ2XPmEmuO4y5c3DZjq7VpNU59Hbgutf6h3QK5BLPnzNVbe/YfLDK5rtuzp6SULcDRwJO+5MnAG2YzCEuZk3APhh82npFj6hk8fBj1R0ygX+UA+gysZMnrf6NpeSPr1n7K4j//lRXLG3nugd+X2mwgwzX8zWypU9Gr7SXYB3hbKXWdiUS1lCn+KYdTJk3kjJMmt00/HF5TzbLIdDY1rWJT0yqWRKazaUVJVvzslIw3m5BSbpdS/hA4B71kOejRq5uAv5mIVEvAiDXHGRv+DhV1o6ioG9UWmFgxupbZc+Yye85cFiwp3TSPrHdFkVI+CBwA+CdOHwS8p5S6QSnVL1fjLMUh4RLseeSh1O1WT/Wuw/jPow6jonIAuwysZKlxCV548JGS2ZjT9j1SykXo0aor0RGooGvXG4EPlVLH5mSdpSikcwka77iXzU2lXQ00532mpJSulPJ24EB0JGqCPYA5SqnfK6VGdX61pdyJNcfblinqVzeqZG5A3jZEM2HShwPfBT7znToDWKiUuswsWGEJCAmXYI8jD6Vf5QD6Dqyk6Y03WdXQyCsPF3eAIK8795na9R7gi8BDvlMD0Sv7va2UOjSf97QUjo6BicNrqtn0yxlsX7m66LYUZItJKeUaKeU3gYmAf/W+A9D9rveZWCxLgIg1x/XKhfV19KodWVQ3oKB7oUop5wH7ozc5S8xjFehJLYuUUmeZ9QIsZU7CDag7fAK7DBhA78pKYn97izUNjbz5uz8U/P4F37RXSrlVSjkNPTDwjO/UUCAKPKGUGlloOyy50ZkbUDNjFn1WF2dNgqLtLi2lXCalnAKcDKzwnToJ+Egpda6tXYNDrDneto9B68gRBXcDir4NupTyKXQs1nRfchUwC5itlBra6YWWsiHhBtQcOp6+AwbQq7KSlrff4ZPGFXzw6OMFuWfRhQogpVwvpbwYOAb4l+/UZODvSqkjSmGXpXt05gaMezjKgLWFi/0siVATSClfAfYD7vIl1wGvKqWuMntTWcqcWHOc+WeH2vaJLQQlF4KUskVK+b/AFGCdSXbQG6c9rpSqKJlxlrQk3IABh3yJ4fWj2f/0Uwtyn5ILNYGU8hn0MKx/ksvJ6GHYqtJYZUlHx3kChYq7KhuhAkgpG4Ev094VOBJ4zXZhlT8Llnzc1vrPdw9AWQkVQErZalyB7/uS9wX+Yie3lDdLlzUQa46zbf4H/LupiYWzn85b2WUn1ARSyp8D3wISwYNj0d1XA0pnlSUdNUOq+Mq8p6mKx/JabtkKFUBK+QBwCkmxHgRElVJO6qsspSTWHOflY05kXfUw4lU1eXMDylqoAGZj34t9SScCt5TIHEsXtK0tMG5/nIr+bK/oj7dsIbHVq1gy98Wcyi57oQJIKRVwuy/pKrNcu6WM6Gwg4ISGN6nenHs0fSCEarga+JM57gXMsFGv5U2sOc5zYyawrt+gnMsKjFCllNvRy7QnpgvuD1xaOossXZFwA8TYL1IzchR7Tjwup/ICI1QAKeW/0IGDCa620a7lSb4HAoIYw3QHcAl6A4xhwNnoFQctZcqCJR+zdFkDoN2BbAhUjQp6QAC99GWCsJ3HWt4kBgK8NQ20bt2KO/OmjMsInFANM4DEZmx7o/1VSxlTM6SKya0r6M32rK4PpFCllJ8B/vG5E0tli6V7xJrjPNtnNNuylFwghWrwbyU0pWRWWNLS1gMwYgx9+vbFOf/6jMsIslBfIDm0+iWlVO6ddZaC0HEgIBsCK1QpZRxY4EuyfupOTGCFanjPd3xgyaywFJygC/V93/HeJbPCUnCCLlR/BGt9yaywFJygC7XRdzymZFZYCk7QhdrgO663I1Q7L0Ec6/fTjF4eaB26dt2F5L4CXRJrjrftu2QpHtmO9Xd7nymLpZQE/dFv6SFYoVoCgRWqJRBYoVoCgRWqJRBYoVoCwf8DdId/GbPJ/MIAAAAASUVORK5CYII=\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "k1_plan_reconstruct = get_plan_from_alpha(a, b, -M, alpha_k1)"
      ],
      "metadata": {
        "id": "_DWO89st039t"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "pl.figure(figsize=(width, width))\n",
        "\n",
        "plot1D_mat(a, b, k1_plan_reconstruct, f'Col-k-sparse')\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 251
        },
        "id": "CzFK8Lc904Bd",
        "outputId": "c83b6f3f-6f9c-47ac-dd43-3c9023a8c352"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 195x195 with 3 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "acm3Yf2m04EI"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "\n",
        "import numpy as onp\n",
        "import scipy\n",
        "\n",
        "import jaxopt\n",
        "import jax.numpy as jnp\n",
        "\n",
        "\n",
        "def get_plan_from_alpha(a, b, C, alpha, eps=1e-10, method=\"pinv\"):\n",
        "  beta = onp.min(C - alpha[:, onp.newaxis], axis=0)\n",
        "  diff = C - alpha[:, onp.newaxis] - beta\n",
        "  support = (diff <= eps).astype(int)\n",
        "  rows, cols = onp.nonzero(support)\n",
        "\n",
        "  ab = onp.concatenate((a, b))\n",
        "  mn = len(a) + len(b)\n",
        "  M = onp.zeros((mn, mn))\n",
        "\n",
        "  for n in range(len(rows)):\n",
        "    i, j = rows[n], cols[n]\n",
        "    M[i, n] = 1\n",
        "    M[j + len(a), n] = 1\n",
        "\n",
        "  if method == \"pinv\":\n",
        "    Minv = scipy.linalg.pinv(M)\n",
        "    t = onp.dot(Minv, ab)\n",
        "\n",
        "  elif method == \"nnls\":\n",
        "    t = scipy.optimize.nnls(M, ab, maxiter=1000)[0]\n",
        "\n",
        "  elif method == \"pg\":\n",
        "    def fun(x):\n",
        "      res = jnp.dot(M, x) - ab\n",
        "      return jnp.dot(res, res)\n",
        "\n",
        "    projection = jaxopt.projection.projection_simplex\n",
        "    pg = jaxopt.ProjectedGradient(fun=fun, projection=projection)\n",
        "    init = jnp.ones(mn) / mn\n",
        "    t = pg.run(init).params\n",
        "\n",
        "  else:\n",
        "    raise ValueError(\"Unknown method.\")\n",
        "\n",
        "  # Reconstruct the full plan matrix.\n",
        "  T = onp.zeros((len(a), len(b)))\n",
        "\n",
        "  for n in range(len(rows)):\n",
        "    i, j = rows[n], cols[n]\n",
        "    T[i, j] = t[n]\n",
        "\n",
        "  return T"
      ],
      "metadata": {
        "id": "DoDKdRzZTMHg"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# if __name__ == '__main__':\n",
        "import ot\n",
        "\n",
        "# Fake data.\n",
        "rng = onp.random.RandomState(0)\n",
        "\n",
        "a = rng.rand(3)\n",
        "a /= a.sum()\n",
        "\n",
        "b = rng.rand(4)\n",
        "b /= b.sum()\n",
        "\n",
        "C = rng.rand(3, 4)\n",
        "\n",
        "# Solve the OT problem.\n",
        "T, dic = ot.emd(a, b, C, log=True)\n",
        "alpha, beta = dic[\"u\"], dic[\"v\"]\n",
        "\n",
        "print(\"POT:\")\n",
        "print(T)\n",
        "\n",
        "print(\"Reconstructed:\")\n",
        "print(get_plan_from_alpha(a, b, C, alpha))"
      ],
      "metadata": {
        "id": "Vx_GooMrTMKs",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "47a8505d-413a-43e6-ae56-ef393972e39c"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "POT:\n",
            "[[0.         0.         0.29399155 0.        ]\n",
            " [0.1491009  0.         0.0207687  0.21324712]\n",
            " [0.11643422 0.20645751 0.         0.        ]]\n",
            "Reconstructed:\n",
            "[[0.         0.         0.29399155 0.        ]\n",
            " [0.1491009  0.         0.0207687  0.21324712]\n",
            " [0.11643422 0.20645751 0.         0.        ]]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "P_k1, alpha_k1 = k_sparse_projection_transport(sim_matrix=-C,\n",
        "                              marginals_a=a,\n",
        "                              marginals_b=b,\n",
        "                              k=1,\n",
        "                              make_solver=lambda fun: jaxopt.LBFGS(fun=fun, tol=1e-8, maxiter=500, linesearch=\"zoom\"),\n",
        "                              return_alpha=True)"
      ],
      "metadata": {
        "id": "D05CXsKi3rGn"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "alpha_k1"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "az05UEr23x8D",
        "outputId": "854c47e9-3c59-4fc0-a226-da5fde24e8d6"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "DeviceArray([235.32108, 235.86029, 235.41591], dtype=float32)"
            ]
          },
          "metadata": {},
          "execution_count": 56
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "alpha"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GEa3RhYT3z1u",
        "outputId": "33c3a7c2-90ec-406d-d605-46830a03cc1b"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([-0.11998462,  0.4221705 , -0.01959512])"
            ]
          },
          "metadata": {},
          "execution_count": 51
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "T, dic = ot.emd(a, b, C, log=True)\n"
      ],
      "metadata": {
        "id": "9ND2MqzF3l16"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# 2D"
      ],
      "metadata": {
        "id": "LhFaB0kiJMbo"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "a = synthetic_2d_dataset['marginals_a']\n",
        "b = synthetic_2d_dataset['marginals_b']\n",
        "M = synthetic_2d_dataset['cost_matrix']\n",
        "xs = synthetic_2d_dataset['xs']\n",
        "xt = synthetic_2d_dataset['xt']\n",
        "\n",
        "plan_sinkhorn = ot.sinkhorn(a, b, M, 1e-1)\n",
        "plan_l2_reg = ot.smooth.smooth_ot_dual(a, b, M, 10, reg_type='l2', numItermax=500)\n",
        "\n",
        "plan_emd = ot.emd(a, b, M)\n",
        "\n",
        "\n",
        "\n",
        "plan_col_2_sparse = k_sparse_projection_transport(sim_matrix=-M,\n",
        "                              marginals_a=a,\n",
        "                              marginals_b=b,\n",
        "                              k=2,\n",
        "                              make_solver=lambda fun: jaxopt.LBFGS(fun=fun, tol=1e-8, maxiter=500, linesearch=\"zoom\"),\n",
        "                              row_k_sparse=False)\n",
        "plan_col_2_sparse = np.asarray(plan_col_2_sparse)\n",
        "\n",
        "\n",
        "plan_col_1_sparse = k_sparse_projection_transport(sim_matrix=-M,\n",
        "                              marginals_a=a,\n",
        "                              marginals_b=b,\n",
        "                              k=1,\n",
        "                              make_solver=lambda fun: jaxopt.LBFGS(fun=fun, tol=1e-8, maxiter=500, linesearch=\"zoom\"),\n",
        "                              row_k_sparse=False)\n",
        "plan_col_1_sparse = np.asarray(plan_col_1_sparse)\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qaSdNe_C9jJc",
        "outputId": "ab8690ae-f22a-4710-8c27-f5a961b63131"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ot/bregman.py:517: UserWarning: Sinkhorn did not converge. You might want to increase the number of iterations `numItermax` or the regularization parameter `reg`.\n",
            "  warnings.warn(\"Sinkhorn did not converge. You might want to \"\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def plot2D_samples_mat(xs, xt, G, thr=1e-8, **kwargs):\n",
        "    r\"\"\" Plot matrix :math:`\\mathbf{G}` in 2D with lines using alpha values\n",
        "\n",
        "    Plot lines between source and target 2D samples with a color\n",
        "    proportional to the value of the matrix :math:`\\mathbf{G}` between samples.\n",
        "\n",
        "\n",
        "    Parameters\n",
        "    ----------\n",
        "    xs : ndarray, shape (ns,2)\n",
        "        Source samples positions\n",
        "    b : ndarray, shape (nt,2)\n",
        "        Target samples positions\n",
        "    G : ndarray, shape (na,nb)\n",
        "        OT matrix\n",
        "    thr : float, optional\n",
        "        threshold above which the line is drawn\n",
        "    **kwargs : dict\n",
        "        parameters given to the plot functions (default color is black if\n",
        "        nothing given)\n",
        "    \"\"\"\n",
        "\n",
        "    if ('color' not in kwargs) and ('c' not in kwargs):\n",
        "        kwargs['color'] = 'k'\n",
        "    mx = G.max()\n",
        "    if 'alpha' in kwargs:\n",
        "        scale = kwargs['alpha']\n",
        "        del kwargs['alpha']\n",
        "    else:\n",
        "        scale = 1\n",
        "\n",
        "    eps = 0.2\n",
        "    for i in range(xs.shape[0]):\n",
        "        for j in range(xt.shape[0]):\n",
        "            if G[i, j] / mx > thr:\n",
        "                alpha =  G[i, j] / mx * scale\n",
        "                if not np.isclose(alpha,0):\n",
        "                  alpha = np.minimum(alpha + eps, 1)\n",
        "                pl.plot([xs[i, 0], xt[j, 0]], [xs[i, 1], xt[j, 1]],\n",
        "                        alpha=alpha, **kwargs)\n",
        "\n"
      ],
      "metadata": {
        "id": "2Zruncz5NmMA"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "transp = [plan_emd, plan_sinkhorn, plan_l2_reg, plan_col_2_sparse, plan_col_1_sparse]\n",
        "title = [\"Unregularized\", \"KL\", \"Squared l2\", \"Col-2-sparse\", \"Col-1-sparse\"]\n",
        "\n",
        "pl.figure(2, figsize=(len(title) * width, 2 * width))\n",
        "\n",
        "\n",
        "for p in range(len(title)):\n",
        "    ax1 = pl.subplot(2, len(title), p + 1)\n",
        "    P = transp[p]\n",
        "\n",
        "    plot2D_samples_mat(xs, xt, P, color=[.5, .5, 1], alpha=1, linewidth=1, thr=0)\n",
        "\n",
        "    # ot.plot.plot2D_samples_mat(xs, xt, P, color=[.5, .5, 1], alpha=0.5, linewidth=2, thr=0)\n",
        "    ax1.plot(xs[:, 0], xs[:, 1], '+', c='#999999', markersize = 10, label='Source samples')\n",
        "    ax1.plot(xt[:, 0], xt[:, 1], '.', c='#fc8d59', markersize = 8, label='Target samples')\n",
        "    ax1.set_xlim([-4, 6])\n",
        "    ax1.set_ylim([-3, 7])\n",
        "    format_axes(ax1)\n",
        "\n",
        "    ax1.set_title(title[p])\n",
        "    # pl.yticks(())\n",
        "    # pl.xticks(())\n",
        "    if p < 1:\n",
        "        ax1.set_ylabel(\"Mappings\")\n",
        "\n",
        "    ax2 = pl.subplot(2, len(title), p + len(title) + 1)\n",
        "    ax2.imshow(P, cmap='Reds')\n",
        "    ax2.axis('off')\n",
        "    draw_blocks(ax2, P)\n",
        "    draw_border(ax2, P)\n",
        "\n",
        "    if p < 1:\n",
        "        pl.ylabel(\"Plans\")\n",
        "\n",
        "\n",
        "if save:\n",
        "  pl.savefig(\"2d_comparison_5_methods.pdf\", dpi=300, transparent=True)\n",
        "  files.download(\"2d_comparison_5_methods.pdf\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 534
        },
        "id": "NnP0BDzSJ9Km",
        "outputId": "20ce7ff4-e170-4532-8697-47c6e376f8bf"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
            "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
            "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ],
            "application/javascript": [
              "\n",
              "    async function download(id, filename, size) {\n",
              "      if (!google.colab.kernel.accessAllowed) {\n",
              "        return;\n",
              "      }\n",
              "      const div = document.createElement('div');\n",
              "      const label = document.createElement('label');\n",
              "      label.textContent = `Downloading \"${filename}\": `;\n",
              "      div.appendChild(label);\n",
              "      const progress = document.createElement('progress');\n",
              "      progress.max = size;\n",
              "      div.appendChild(progress);\n",
              "      document.body.appendChild(div);\n",
              "\n",
              "      const buffers = [];\n",
              "      let downloaded = 0;\n",
              "\n",
              "      const channel = await google.colab.kernel.comms.open(id);\n",
              "      // Send a message to notify the kernel that we're ready.\n",
              "      channel.send({})\n",
              "\n",
              "      for await (const message of channel.messages) {\n",
              "        // Send a message to notify the kernel that we're ready.\n",
              "        channel.send({})\n",
              "        if (message.buffers) {\n",
              "          for (const buffer of message.buffers) {\n",
              "            buffers.push(buffer);\n",
              "            downloaded += buffer.byteLength;\n",
              "            progress.value = downloaded;\n",
              "          }\n",
              "        }\n",
              "      }\n",
              "      const blob = new Blob(buffers, {type: 'application/binary'});\n",
              "      const a = document.createElement('a');\n",
              "      a.href = window.URL.createObjectURL(blob);\n",
              "      a.download = filename;\n",
              "      div.appendChild(a);\n",
              "      a.click();\n",
              "      div.remove();\n",
              "    }\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ],
            "application/javascript": [
              "download(\"download_96e95d7c-3f2b-4f01-9b48-6734717081d2\", \"2d_comparison_5_methods.pdf\", 441736)"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 975x390 with 10 Axes>"
            ],
            "image/png": "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lLofFroRwDul7kSJFbINjv7oRz96qgh90WG8VSTGm70Yc4w5OzHeGG92YrxZHW9CCP7nsP9+/OMf95S6D6X+j9uA25rboHL/4/bmNuC25jao1P+4ra3fBnwMjIiIiIiIHImDFSIiIiIiciQOVpxpQ6k74ADcBvbhtuY2sBu3N7eBnbituQ3sxG1t8TaoiAn2RERERERUeXhnhYiIiIiIHImDFSIiIiIiciQOVhxE07SApmmbNU0b1TRtQNO0Py91n+ymadouTdPGNU07f+G/P5W6T5WK8SYx5uzDmGO82YnxxnizE+NNKkbMcbDiLP8TwCSABQC+DeBfNU37bGm7VBJ/LYSYe+G/q0vdmQrGeJvGmLMHY05ivNmD8SYx3uzBeJtmacxxsOIQmqbVAfjfAPyDEOK8EOJ1AFsAfKe0PaNKxHgjuzHmyE6MN7IT4624OFhxjqsAJIQQn8woex9ANY7K/5umaec0TXtD07TVpe5MhWK86THmio8xN43xVnyMt2mMt+JjvOlZGnMcrDjHXADDGWVDAOaVoC+l9L8DuBLAIsg83Vs1TftMabtUkRhv0xhz9mDMSYw3ezDeJMabPRhv0yyPOQ5WnOM8gPqMsnoAIyXoS8kIId4SQowIISaEEBsBvAFgfan7VYEYbxcw5mzDmAPjzUaMNzDebMR4u6AYMcfBinN8AsCjaVrbjLIvAPioRP1xCgFAK3UnKhDjzRxjrjgYc8YYb8XBeDPGeCsOxpu5i445DlYcQggxCuAFAP+3pml1mqbdBuBrAJ4ubc/so2lao6ZpX9E0rVbTNI+mad8GcAeA35e6b5WG8SYx5uzDmGO82YnxxnizE+NNKlbMeazpHlnk+wCeADAIIATge0KIahqVewH8I4BrACQBfAzg6xkT1sg61R5vAGPObtUec4w3ezHeGG92qvZ4A4oUc5oQwoK+ERERERERWYuPgRERERERkSNxsEJERERERI7EwQoRERERETkSBytERERERORIHKwQEREREZEjcbBCRERERESOxMEKERERERE5EgcrRERERETkSBysEBERERGRI3GwQkREREREjsTBChEREREROZKn1B2wwlNPPimCTY0XvZ5QJIp4IoH46JiyzD2nBnNqa2FFO2S9UCSKRx74BuBv0Ird1uOPPy68HvWrE08kAACZy8zKp5Ylk/Ak4rryhMcL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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "ax2 = pl.subplot()\n",
        "ax2.imshow(P, cmap='Reds')\n",
        "ax2.axis('off')\n",
        "draw_blocks(ax2, P)\n",
        "draw_border(ax2, P)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 248
        },
        "id": "ya-S0GHALEQL",
        "outputId": "6e833f4c-cbba-4650-c8ac-f68fe89f57b5"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "ZuD9wLzTMnOQ"
      },
      "execution_count": null,
      "outputs": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.12"
    },
    "colab": {
      "provenance": []
    },
    "accelerator": "GPU",
    "gpuClass": "standard"
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
